/*
 * Object3d.h
 *
 *      Author: grifos
 */

#ifndef OBJECT3D_H_
#define OBJECT3D_H_

#include <osg/Matrix>
#include <osg/Transform>
#include <osg/MatrixTransform>
#include <osg/Math>
#include <osg/Geode>
#include <osg/Material>
#include <osg/Vec3>
#include <osg/PositionAttitudeTransform>
#include <osgUtil/Optimizer>
#include <osgDB/ReadFile>
#include <osgUtil/SceneView>

#include <gmtl/Vec.h>
#include <gmtl/Coord.h>
#include <gmtl/Xforms.h>
#include <gmtl/Math.h>


class CObject3d {
private:
	osg::ref_ptr<osg::MatrixTransform> mBaseNode; // le noeud de base qui va positionner l'objet à l'endroit voulu
	osg::ref_ptr<osg::MatrixTransform> mObjectRotation; // Le noeud de rotation de l'objet
	osg::ref_ptr<osg::MatrixTransform> mObjectScale; // Le noeud de scaling de l'objet
	osg::ref_ptr<osg::Node> mObjectModel; // Le noeud de l'objet
	float mX, mY, mZ;
	float mVitesse;
	bool mSelected; // Indique si l'objet est sélecetionné par la wand
public:
	CObject3d(float x, float y, float z, float vitesse, std::string& name, float scale);
	virtual ~CObject3d();

	void update(float d);
	osg::MatrixTransform* getNode() { return mBaseNode.get(); }

	void setSelected(bool v){ mSelected = v; }
	bool getSelected() { return mSelected; }
	void addMovement(osg::Vec3 v){ setPosition(mX+v.x(),mY+v.y(),mZ+v.z()); }

	void checkIntersect(osg::Vec3 wp);
	void setPosition(float x, float y, float z);
	osg::Vec3 getPosition(){ return osg::Vec3(mX,mY,mZ); }
	osg::MatrixTransform* getRotMatrix(){ return mObjectRotation.get(); }
};

#endif /* OBJECT3D_H_ */
